package es;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import modelo.Constantes;
import modelo.Usuario;

public class Parser
{
	
    public static void parsearEntrada(String rutaArchivoEntrada, ArrayList<Usuario> listaUsuarios, ArrayList<String> listaAmigos)
    {
    	File archivoEntrada = new File(rutaArchivoEntrada);
    	BufferedReader reader = null;

    	try {
    		reader = new BufferedReader(new FileReader(archivoEntrada));
    		String registro = null;
    		
    		//Validamos si el formato del archivo es válido
    		registro = reader.readLine();
    		if (!registro.startsWith("nodedef>")) {
    			
    			System.err.println("Error: formato inválido de archivo de entrada.");
    			System.exit(Constantes.EXIT_FAILURE);
    		}

    		//Comenzamos a leer las lineas del archivo
    		char modoOperacion = 'n';
    		while ((registro = reader.readLine()) != null) {
    	        
    			if (registro.startsWith("edgedef>")) {
    				modoOperacion = 'e';
    				continue;
    			}
    			
    			if (modoOperacion == 'n') {
    				//Guardado de registro de nodo
    				String[] valoresTemp = registro.split(Constantes.csvDelimitador);
    				if (valoresTemp.length == 1)
    					continue;
    				String idTemp = valoresTemp[0];
    				String nombreTemp = valoresTemp[1];
    				
    				Usuario usuarioTemp = new Usuario(idTemp,nombreTemp);
    				listaUsuarios.add(usuarioTemp);
    				
    			} else {
    				//Guardado de registro de vertice
    				String[] valoresTemp = registro.split(Constantes.csvDelimitador);
    				if (valoresTemp.length == 1)
    					continue;
    				listaAmigos.add(valoresTemp[0]);
    				listaAmigos.add(valoresTemp[1]);
    			}
    		}
    	} catch (FileNotFoundException e) {
    		System.err.println("Error: no se encontró el archivo de entrada `" + rutaArchivoEntrada + "'.");
    		System.exit(Constantes.EXIT_FAILURE);
    	} catch (IOException e) {
    		System.err.println("Error de entrada/salida, no se pudo leer el contenido del archivo de entrada `" + rutaArchivoEntrada + "'.");
    		System.exit(Constantes.EXIT_FAILURE);
    	} finally {
    	    try {
    	        if (reader != null) {
    	            reader.close();
    	        }
    	    } catch (IOException e) {
    	    	System.err.println("Error de entrada/salida, no se pudo cerrar el archivo de entrada `" + rutaArchivoEntrada + "'.");
    	    	System.exit(Constantes.EXIT_FAILURE);
    	    }
    	}    
    }
}
